package abd.pr1.Controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;

import abd.pr1.Interface.EpisodioWindow;
import abd.pr1.Interface.NuevoComentarioEpisodioWindow;
import abd.pr1.Interface.NuevoComentarioSerieWindow;
import abd.pr1.Interface.SerieWindow;
import abd.pr1.Mappers.ActoresMapper;
import abd.pr1.Mappers.ClaveSeguidor;
import abd.pr1.Mappers.EpisodiosMapper;
import abd.pr1.Mappers.GenerosMapper;
import abd.pr1.Mappers.PersonajesActoresMapper;
import abd.pr1.Mappers.PersonajesMapper;
import abd.pr1.Mappers.SeguidoresMapper;
import abd.pr1.Mappers.SeriesGenerosMapper;
import abd.pr1.Mappers.SeriesMapper;
import abd.pr1.Mappers.VotosEpisodiosMapper;
import abd.pr1.Mappers.VotosSeriesMapper;
import abd.pr1.Models.Actor;
import abd.pr1.Models.Episodio;
import abd.pr1.Models.Genero;
import abd.pr1.Models.Personaje;
import abd.pr1.Models.PersonajeActor;
import abd.pr1.Models.Seguidor;
import abd.pr1.Models.Serie;
import abd.pr1.Models.SerieGenero;
import abd.pr1.Models.Usuario;
import abd.pr1.Models.VotoEpisodio;
import abd.pr1.Models.VotoSerie;

public class EpisodioWindowController implements ActionListener{

	
	
	private MainWindowController mainWindowController;
	private EpisodioWindow episodioWindow;
	private DataSource ds;
	private Usuario user;
	private Episodio episodio;
	
	private Seguidor seguidor;
	
	public EpisodioWindowController(MainWindowController mainWindowController, EpisodioWindow episodioWindow,DataSource ds, Usuario user, Episodio episodio){
		
		this.mainWindowController= mainWindowController;
		this.episodioWindow=episodioWindow;
		this.ds=ds;
		this.user=user;
		this.episodio=episodio;
		
		this.episodioWindow.addListener(this);
		
		refreshEpisodio();
	}
	
	public void refreshEpisodio(){
		episodioWindow.setNombre(episodio.getNombre());
		episodioWindow.setSinopsis(episodio.getSinopsis());
		episodioWindow.setEstreno(episodio.getEstreno());
		episodioWindow.setOrden(episodio.getOrden());
		episodioWindow.setTemporada(episodio.getTemporada());
		
		List<VotoEpisodio> votoepisodio=new VotosEpisodiosMapper(ds).queryByExample(new VotoEpisodio(user.getId(), episodio.getId(), null));
		int calificacion=0;
		if(votoepisodio.size()>0){
			calificacion=votoepisodio.get(0).getVoto();
		}
		episodioWindow.setCalificacion(calificacion);
		episodioWindow.setPuntuacion(new EpisodiosMapper(ds).puntuacionMedia(episodio));
		
		List<PersonajeActor> personajeActor = new PersonajesActoresMapper(ds).queryByExample(new PersonajeActor(null, null, episodio.getId()));
		List<Actor> actores = new ArrayList<Actor>();
		List<Personaje> personajes = new ArrayList<Personaje>();
		
		for (int i = 0; i < personajeActor.size(); i++) {
			 actores.add(new ActoresMapper(ds).findById(personajeActor.get(i).getId_actor()));
			 personajes.add(new PersonajesMapper(ds).findById(personajeActor.get(i).getId_personaje()));
		}
		episodioWindow.setActoresPersonajesTable(actores,personajes);
		episodioWindow.setComentario(new EpisodiosMapper(ds).comentariosEpisodio(episodio));
	}


	
	@Override
	public void actionPerformed(ActionEvent e) {
		 if(e.getActionCommand().equals("cerrar_episodio")){
			 episodioWindow.dispose();
		}
		 else if(e.getActionCommand().equals("calificar_episodio")){
				
				
				List<VotoEpisodio> votoUsuario=new VotosEpisodiosMapper(ds).queryByExample(new VotoEpisodio(user.getId(), episodio.getId(), null));
				if(votoUsuario.size()>0)
				{
					
					votoUsuario.get(0).setVoto(episodioWindow.getCalificacion());
					new VotosEpisodiosMapper(ds).update(votoUsuario.get(0));
				}else{
					VotoEpisodio votoEpisodio= new VotoEpisodio(user.getId(), episodio.getId(), episodioWindow.getCalificacion());
					new VotosEpisodiosMapper(ds).insert(votoEpisodio);
				}
				this.refreshEpisodio();
				
			}else if(e.getActionCommand().equals("nuevo_comentario")){
				new NuevoComentarioEpisodioWindowController(this, new NuevoComentarioEpisodioWindow(), this.ds, this.episodio, this.user);
			}
	}


	
}
